home *** CD-ROM | disk | FTP | other *** search
/ Merciful 2 / Merciful - Disc 2.iso / software / a / aplayerv1.3+keyfile.lha / APlayer / Files / Developer.lha / Examples / apFuture13Library.S < prev    next >
Text File  |  1994-11-14  |  27KB  |  1,232 lines

  1. ; $VER: Future13.library 2.11
  2. ;
  3.  
  4.     INCDIR    "Includes3.0:Include3.0/"
  5.     INCLUDE    "Exec/Types.i"
  6.     INCLUDE    "Own/SystemBases.i"
  7.     INCLUDE    "Own/SystemStructures.i"
  8.     INCLUDE    "Own/SystemOffsets.i"
  9.     INCLUDE    "Own/AccessiblePlayer.i"
  10.  
  11.  
  12. VERSION        =    2
  13. REVISION    =    11
  14.  
  15. TRUE        =    -1
  16. FALSE        =    0
  17.  
  18. ; Library Data
  19.  
  20. LN_Name        =    10
  21. LN_Type        =    8
  22. NT_Library    =    9
  23.  
  24. LIBB_Summing    =    0
  25. LIBB_Changed    =    1
  26. LIBB_SumUsed    =    2
  27. LIBB_DelExp    =    3
  28.  
  29. LIBF_Summing    =    1<<LIBB_Summing
  30. LIBF_Changed    =    1<<LIBB_Changed
  31. LIBF_SumUsed    =    1<<LIBB_SumUsed
  32. LIBF_DelExp    =    1<<LIBB_DelExp
  33.  
  34. ; Macros
  35.  
  36. INBYTE    MACRO
  37.     dc.b    %11100000,0
  38.     dc.w    \1
  39.     dc.b    \2,0
  40.     ENDM
  41.  
  42. INWORD    MACRO
  43.     dc.b    %11010000,0
  44.     dc.w    \1,\2
  45.     ENDM
  46.  
  47. INLONG    MACRO
  48.     dc.b    %11000000,0
  49.     dc.w    \1
  50.     dc.l    \2
  51.     ENDM
  52.  
  53. ; Library Base Structure
  54.  
  55.     STRUCTURE LibraryStruct,0
  56.     STRUCT    LIB_Node,14
  57.     UBYTE    LIB_Flags
  58.     UBYTE    LIB_Pad
  59.     UWORD    LIB_NegSize
  60.     UWORD    LIB_PosSize
  61.     UWORD    LIB_Version
  62.     UWORD    LIB_Revision
  63.     APTR    LIB_IDString
  64.     ULONG    LIB_Sum
  65.     UWORD    LIB_OpenCnt
  66.  
  67.     LONG    LIB_SegList
  68.     LABEL    LibraryStruct_SIZEOF
  69.  
  70.  
  71.     SECTION    Future13.library,CODE
  72.  
  73. START    moveq    #0,d0
  74.     rts
  75. ;------------------------------------------------------------------------------
  76. LIBNAME    dc.b    "apFuture13.library",0
  77.  
  78. LIBID    dc.b    "Future13.library 2.11 (13-November-1994)",0
  79.     even
  80. ;------------------------------------------------------------------------------
  81. ; ROMTAG Structure
  82. ;
  83.  
  84. ROMTAG    dc.w    $4afc            ;ROMTAG Indentifier
  85.     dc.l    romtag
  86.     dc.l    slut
  87.     dc.b    $80            ;Flags
  88.     dc.b    version
  89.     dc.b    $09            ;Type Of Module
  90.     dc.b    $00            ;Initialization Priority
  91.     dc.l    libname
  92.     dc.l    libid
  93.     dc.l    autinit            ;Pointer To AUTOINIT Table
  94. ;------------------------------------------------------------------------------
  95. ; AUTOINIT Table
  96. ;
  97.  
  98. AUTINIT    dc.l    LibraryStruct_SIZEOF    ;Size Of Structure AFTER Base Address
  99.     dc.l    vector            ;Pointer To Vector Table
  100.     dc.l    inittab            ;Pointer To Init Structure
  101.     dc.l    init            ;Pointer To Init Routine
  102. ;------------------------------------------------------------------------------
  103. ; Init Table
  104. ;
  105.  
  106. INITTAB    INBYTE    LN_Type,NT_Library
  107.     INBYTE    LIB_Flags,LIBF_SumUsed!LIBF_Changed
  108.     INWORD    LIB_Version,version
  109.     INWORD    LIB_Revision,revision
  110.     INLONG    LN_Name,libname
  111.     INLONG    LIB_IDString,libid
  112.     dc.l    0
  113. ;------------------------------------------------------------------------------
  114. ; Vector Table
  115. ;
  116.  
  117. VECTOR    dc.w    -1
  118.     dc.w    opnlib-vector,clslib-vector,expunge-vector,extfunc-vector
  119.     dc.w    FC_GetTags-vector
  120.     dc.w    -1
  121. ;------------------------------------------------------------------------------
  122. ; Init Routine
  123. ;
  124.  
  125. INIT    movem.l    d1-d7/a0-a6,-(sp)
  126.     move.l    d0,a4            ;Base Address
  127.     move.l    a0,LIB_SegList(a4)
  128.  
  129.     move.l    a4,d0
  130.     movem.l    (sp)+,d1-d7/a0-a6
  131.     rts
  132. ;------------------------------------------------------------------------------
  133. ; Offset  -6: Open Library
  134. ;
  135.  
  136. OPNLIB    addq.w    #1,LIB_OpenCnt(a6)
  137.     bclr    #LIBB_DelExp,LIB_Flags(a6)
  138.     move.l    a6,d0
  139.     rts
  140. ;------------------------------------------------------------------------------
  141. ; Offset -12: Close Library
  142. ;
  143.  
  144. CLSLIB    moveq    #0,d0
  145.     subq.w    #1,LIB_OpenCnt(a6)
  146.     bne.b    clslibo
  147.     btst    #LIBB_DelExp,LIB_Flags(a6)
  148.     bne.b    expunge
  149. CLSLIBO    rts
  150. ;------------------------------------------------------------------------------
  151. ; Offset -18: Expunge
  152. ;
  153.  
  154. EXPUNGE    movem.l    d1-d7/a0-a6,-(sp)
  155.     move.l    a6,a4
  156.     tst.w    LIB_OpenCnt(a4)
  157.     beq.b    exp1
  158.     bset    #LIBB_DelExp,LIB_Flags(a4)
  159.     moveq    #0,d0
  160.     bra.b    expungo
  161.  
  162. EXP1    move.l    4.w,a6
  163.     move.l    LIB_SegList(a4),d2
  164.     move.l    a4,a1
  165.     jsr    Remove(a6)
  166.  
  167.     move.l    a4,a1
  168.     moveq    #0,d0
  169.     move.w    LIB_NegSize(a4),d0
  170.     sub.l    d0,a1
  171.     add.w    LIB_PosSize(a4),d0
  172.     jsr    FreeMem(a6)
  173.     move.l    d2,d0
  174.  
  175. EXPUNGO    movem.l    (sp)+,d1-d7/a0-a6
  176.     rts
  177. ;------------------------------------------------------------------------------
  178. ; Offset -24: ExtFunc
  179. ;
  180.  
  181. EXTFUNC    moveq    #0,d0
  182.     rts
  183. ;------------------------------------------------------------------------------
  184. ;******************************************************************************
  185. ;* Future Composer 1.0-1.3 Player
  186. ;******************************************************************************
  187. ;------------------------------------------------------------------------------
  188.     STRUCTURE Future13Struct,0
  189.     APTR    F13_Global
  190.     APTR    F13_SEQPoint
  191.     APTR    F13_PATPoint
  192.     APTR    F13_FRQPoint
  193.     APTR    F13_VOLPoint
  194.     UWORD    F13_OnOff
  195.     UWORD    F13_ActChan
  196.     WORD    F13_ReSpCnt
  197.     WORD    F13_RepSpd
  198.     WORD    F13_SpdTemp
  199.     UWORD    F13_AudTemp
  200.     STRUCT    F13_PerVol,16
  201.     STRUCT    F13_V1Data,64
  202.     STRUCT    F13_Offset1,2
  203.     STRUCT    F13_SSize1,2
  204.     STRUCT    F13_Start1,6
  205.     STRUCT    F13_V2Data,64
  206.     STRUCT    F13_Offset2,2
  207.     STRUCT    F13_SSize2,2
  208.     STRUCT    F13_Start2,6
  209.     STRUCT    F13_V3Data,64
  210.     STRUCT    F13_Offset3,2
  211.     STRUCT    F13_SSize3,2
  212.     STRUCT    F13_Start3,6
  213.     STRUCT    F13_V4Data,64
  214.     STRUCT    F13_Offset4,2
  215.     STRUCT    F13_SSize4,2
  216.     STRUCT    F13_Start4,6
  217.     STRUCT    F13_SoundInfo,10*10+47*10
  218.     LABEL    Future13Struct_SIZEOF
  219. ;------------------------------------------------------------------------------
  220. ; Offset -30: GetTags
  221. ;
  222. ; IN :    Nothing
  223. ;
  224. ; OUT:    A0 = Pointer To A TagList
  225. ;
  226.  
  227. FC_GetTags
  228.     lea    FC_Tags(pc),a0
  229.     rts
  230.  
  231. FC_Tags    dc.l    APT_RequestVersion,2
  232.     dc.l    APT_EarlyCheck,FC_TestModule
  233.  
  234.     dc.l    APT_InitPlayer,FC_InitPlayer
  235.     dc.l    APT_EndPlayer,FC_EndPlayer
  236.     dc.l    APT_InitSound,FC_InitSound
  237.     dc.l    APT_EndSound,FC_EndSound
  238.     dc.l    APT_Interrupt,FC_PlayModule
  239.  
  240.     dc.l    APT_PlayerName,fcname
  241.     dc.l    APT_Description,fcdes
  242.  
  243.     dc.l    APT_Volume,TRUE
  244.     dc.l    APT_Pause,TRUE
  245.  
  246.     dc.l    APT_GetSongLength,FC_GetSongLength
  247.  
  248.     dc.l    APT_GetSongPos,FC_GetSongPos
  249.     dc.l    APT_Rewind,FC_Rewind
  250.     dc.l    APT_Forward,FC_Forward
  251.     dc.l    APT_ChangeChannel,FC_ChangeChannel
  252.     dc.l    TAG_END
  253.  
  254. FCNAME    dc.b    "Future Composer 1.0-1.3",0
  255. FCDES    dc.b    "Original player by SuperSero.",10
  256.     dc.b    "Adapted by Tax.",10,10
  257.     dc.b    "This player can play all modules",10
  258.     dc.b    "made with Future Composer 1.0 to",10
  259.     dc.b    "1.3.",0
  260.     even
  261. ;------------------------------------------------------------------------------
  262. ; TestModule
  263. ;
  264. ; IN :    Nothing
  265. ;
  266. ; OUT:    D0 = Success (0=Unknown, 1=Ok, 2=Error)
  267. ;
  268.  
  269. FC_TestModule
  270.     movem.l    d1-d2/a0/a4-a5,-(sp)
  271.  
  272.     subq.l    #4,sp
  273.     moveq    #0,d1
  274.     moveq    #4,d2
  275.     move.l    sp,a0
  276.     move.l    APG_CheckLoad(a5),a4
  277.     jsr    (a4)            ;Load One Longword
  278.     move.l    (sp)+,d1
  279.     tst.l    d0
  280.     beq.b    .tsmod1
  281.  
  282.     moveq    #1,d0            ;Ok
  283.     cmp.l    #"SMOD",d1
  284.     beq.b    .tsmodo
  285.     moveq    #0,d0            ;Unknown
  286.     bra.b    .tsmodo
  287.  
  288. .TSMOD1    moveq    #2,d0            ;Error
  289. .TSMODO    movem.l    (sp)+,d1-d2/a0/a4-a5
  290.     rts
  291. ;------------------------------------------------------------------------------
  292. ; InitPlayer
  293. ;
  294. ; IN :    A1 = Address
  295. ;
  296. ; OUT:    D1 = Success (0=Error)
  297. ;
  298.  
  299. FC_InitPlayer
  300.     movem.l    d0/a0,-(sp)
  301.     move.l    APG_AllocChannels(a5),a0
  302.     jsr    (a0)
  303.     move.l    d0,d1
  304.     movem.l    (sp)+,d0/a0
  305.     rts
  306. ;------------------------------------------------------------------------------
  307. ; EndPlayer
  308. ;
  309. ; IN :    A1 = Address
  310. ;
  311. ; OUT:    Nothing
  312. ;
  313.  
  314. FC_EndPlayer
  315.     move.l    a0,-(sp)
  316.     move.l    APG_FreeChannels(a5),a0
  317.     jsr    (a0)
  318.     move.l    (sp)+,a0
  319.     rts
  320. ;------------------------------------------------------------------------------
  321. ; InitSound
  322. ;
  323. ; IN :    A1 = Address
  324. ;
  325. ; OUT:    Nothing
  326. ;
  327.  
  328. FC_InitSound
  329.     movem.l    d0-d3/d6-d7/a0-a6,-(sp)
  330.  
  331.     lea    FC_DataArea,a5
  332.     move.w    #1,F13_OnOff(a5)
  333.     bset    #1,$bfe001        ;Turn Filter Off
  334.  
  335.     lea    100(a1),a0
  336.     move.l    a0,F13_SEQPoint(a5)
  337.     move.l    a1,a0
  338.     add.l    8(a1),a0
  339.     move.l    a0,F13_PATPoint(a5)
  340.     move.l    a1,a0
  341.     add.l    16(a1),a0
  342.     move.l    a0,F13_FRQPoint(a5)
  343.     move.l    a1,a0
  344.     add.l    24(a1),a0
  345.     move.l    a0,F13_VOLPoint(a5)
  346.     move.l    4(a1),d0
  347.     divu    #13,d0
  348.  
  349.     lea    F13_SoundInfo(a5),a2
  350.     moveq    #1,d2
  351.     moveq    #10-1,d1
  352. .INIMO1    clr.l    (a2)
  353.     addq.l    #6,a2
  354.     move.l    d2,(a2)+
  355.     dbra    d1,.inimo1
  356.  
  357.     moveq    #0,d2
  358.     moveq    #$10,d3
  359.     moveq    #$08,d7
  360.     moveq    #32-1,d1
  361. .INIMO2    move.l    d2,(a2)+
  362.     move.w    d3,(a2)+
  363.     move.l    d3,(a2)+
  364.     add.l    #$20,d2
  365.     dbra    d1,.inimo2
  366.  
  367.     moveq    #8-1,d1
  368. .INIMO3    move.l    d2,(a2)+
  369.     move.w    d7,(a2)+
  370.     move.l    d7,(a2)+
  371.     add.l    #$10,d2
  372.     dbra    d1,.inimo3
  373.  
  374.     move.l    d2,(a2)+
  375.     move.w    d3,(a2)+
  376.     move.l    d3,(a2)+
  377.     add.l    #$20,d2
  378.     move.l    d2,(a2)+
  379.     move.w    d7,(a2)+
  380.     move.l    d7,(a2)+
  381.     add.l    #$10,d2
  382.     REPT    2
  383.     move.l    d2,(a2)+
  384.     move.w    d3,(a2)+
  385.     move.l    d3,(a2)+
  386.     add.l    #$20,d2
  387.     ENDR
  388.     REPT    2
  389.     move.l    d2,(a2)+
  390.     move.w    d7,(a2)+
  391.     move.l    d7,(a2)+
  392.     add.l    #$10,d2
  393.     ENDR
  394.     move.l    d2,(a2)+
  395.     move.w    #$18,(a2)+
  396.     move.l    #$18,(a2)
  397.  
  398.     lea    40(a1),a0
  399.     lea    F13_SoundInfo+4(a5),a2
  400.     moveq    #10-1,d1
  401. .INIMO4    move.w    (a0)+,(a2)+
  402.     move.l    (a0)+,(a2)+
  403.     addq.l    #4,a2
  404.     dbra    d1,.inimo4
  405.  
  406.     moveq    #0,d2
  407.     move.l    a1,d1
  408.     add.l    32(a1),d1
  409.     sub.l    #WAVEFORMS,d1
  410.     lea    F13_SoundInfo(a5),a0
  411.     move.l    d1,(a0)+
  412.     moveq    #9-1,d3
  413. .INIMO5    move.w    (a0),d2
  414.     add.l    d2,d1
  415.     add.l    d2,d1
  416.     addq.l    #6,a0
  417.     move.l    d1,(a0)+
  418.     dbra    d3,.inimo5
  419.  
  420.     move.l    F13_SEQpoint(a5),a0
  421.     moveq    #0,d2
  422.     move.b    12(a0),d2        ;Get replay speed
  423.     bne.b    .inimo6
  424.     moveq    #3,d2            ;Set default speed
  425.  
  426. .INIMO6    move.w d2,F13_ReSpCnt(a5)    ;Init repspeed counter
  427.     move.w d2,F13_RepSpd(a5)
  428.  
  429.     clr.w    F13_AudTemp(a5)
  430.     clr.w    F13_SpdTemp(a5)
  431.     move.w    #$000f,$dff096        ;Disable audio DMA
  432.     move.w    #$0780,$dff09a        ;Disable audio IRQ
  433.     moveq    #0,d7
  434.     mulu    #13,d0
  435.  
  436.     lea    F13_V1data(a5),a0    ;Point to 1st voice data area
  437.     lea    SILENT(pc),a1
  438.     lea    o4a0c8(pc),a2
  439.     moveq    #4-1,d6            ;Number of soundchannels-1
  440. .INIMO7    move.l    a1,10(a0)
  441.     move.l    a1,18(a0)
  442.     clr.l    14(a0)
  443.     clr.b    45(a0)
  444.     clr.b    47(a0)
  445.     clr.w    8(a0)
  446.     clr.l    48(a0)
  447.     move.b    #$01,23(a0)
  448.     move.b    #$01,24(a0)
  449.     clr.b    25(a0)
  450.     clr.l    26(a0)
  451.     clr.w    30(a0)
  452.     moveq    #$00,d3
  453.     move.w    (a2)+,d1
  454.     move.w    (a2)+,d3
  455.     divu    #$0003,d3
  456.     move.b    d3,32(a0)
  457.     mulu    #$0003,d3
  458.     and.l    #$00ff,d3
  459.     and.l    #$00ff,d1
  460.     add.l    #$dff0a0,d1
  461.     move.l    d1,a6
  462.     move.l    #$0000,(a6)
  463.     move.w    #$0100,4(a6)
  464.     move.w    #$0000,6(a6)
  465.     move.w    #$0000,8(a6)
  466.     move.l    d1,60(a0)
  467.     clr.w    64(a0)
  468.     move.l    F13_SEQPoint(a5),(a0)
  469.     move.l    F13_SEQPoint(a5),52(a0)
  470.     add.l    d0,52(a0)
  471.     add.l    d3,52(a0)
  472.     add.l    d7,(a0)
  473.     add.l    d3,(a0)
  474.     move.w    #$000d,6(a0)
  475.     move.l    (a0),a3
  476.     move.b    (a3),d1
  477.     andi.l    #$00ff,d1
  478.     lsl.w    #6,d1
  479.     move.l    F13_PATPoint(a5),a4
  480.     adda.l    d1,a4
  481.     move.l    a4,34(a0)
  482.     clr.l    38(a0)
  483.     move.b    #$01,33(a0)
  484.     move.b    #$02,42(a0)
  485.     move.b    1(a3),44(a0)
  486.     move.b    2(a3),22(a0)
  487.     clr.b    43(a0)
  488.     clr.b    45(a0)
  489.     clr.w    56(a0)
  490.     adda.w    #$004a,a0        ;Point to next voice's data area
  491.     dbra    d6,.inimo7
  492.  
  493.     movem.l    (sp)+,d0-d3/d6-d7/a0-a6
  494.     rts
  495. ;------------------------------------------------------------------------------
  496. ; EndSound
  497. ;
  498. ; IN :    A1 = Address
  499. ;
  500. ; OUT:    Nothing
  501. ;
  502.  
  503. FC_EndSound
  504.     move.l    d0,-(sp)
  505.     clr.w    FC_DataArea+F13_OnOff
  506.     moveq    #0,d0
  507.     move.w    d0,$dff0a8
  508.     move.w    d0,$dff0b8
  509.     move.w    d0,$dff0c8
  510.     move.w    d0,$dff0d8
  511.     move.w    #$000f,$dff096
  512.     move.l    (sp)+,d0
  513.     rts
  514. ;------------------------------------------------------------------------------
  515. ; GetSongLength
  516. ;
  517. ; IN :    A1 = Address
  518. ;
  519. ; OUT:    D1 = Length
  520. ;
  521.  
  522. FC_GetSongLength
  523.     move.l    4(a1),d1
  524.     divu    #13,d1            ;Song Length
  525.     rts
  526. ;------------------------------------------------------------------------------
  527. ; GetSongPos
  528. ;
  529. ; IN :    A1 = Address
  530. ;
  531. ; OUT:    D1 = Position (0-x)
  532. ;
  533.  
  534. FC_GetSongPos
  535.     move.l    a0,-(sp)
  536.     lea    FC_DataArea+F13_V1Data,a0
  537.     moveq    #0,d1
  538.     move.w    6(a0),d1
  539.     divu    #13,d1
  540.     subq.w    #1,d1
  541.     move.l    (sp)+,a0
  542.     rts
  543. ;------------------------------------------------------------------------------
  544. ; Rewind
  545. ;
  546. ; IN :    A1 = Address
  547. ;
  548. ; OUT:    D1 = New Position
  549. ;
  550.  
  551. FC_Rewind
  552.     movem.l    d0/d2/a0-a1,-(sp)
  553.  
  554.     bsr.b    FC_GetSongPos
  555.     tst.w    d1
  556.     bmi.b    fforwao
  557.     beq.b    fforwao
  558.     subq.w    #1,d1
  559.     bra.b    fforwa1
  560. ;------------------------------------------------------------------------------
  561. ; Forward
  562. ;
  563. ; IN :    A1 = Address
  564. ;
  565. ; OUT:    D1 = New Position
  566. ;
  567.  
  568. FC_Forward
  569.     movem.l    d0/d2/a0-a1,-(sp)
  570.  
  571.     bsr.b    FC_GetSongLength
  572.     move.w    d1,d0
  573.  
  574.     bsr.b    FC_GetSongPos
  575.     addq.w    #1,d1
  576.     cmp.w    d0,d1
  577.     blt.b    fforwa1
  578.     moveq    #0,d1
  579.  
  580. FFORWA1    move.w    d1,d2
  581.     mulu    #13,d2
  582.     moveq    #64,d0
  583.     lea    FC_DataArea,a0
  584.  
  585.     lea    F13_V1Data(a0),a1
  586.     move.w    d0,40(a1)        ;Reset Pattern Pos
  587.     move.w    d2,6(a1)        ;Set Song Position
  588.     lea    F13_V2Data(a0),a1
  589.     move.w    d0,40(a1)        ;Reset Pattern Pos
  590.     move.w    d2,6(a1)        ;Set Song Position
  591.     lea    F13_V3Data(a0),a1
  592.     move.w    d0,40(a1)        ;Reset Pattern Pos
  593.     move.w    d2,6(a1)        ;Set Song Position
  594.     lea    F13_V4Data(a0),a1
  595.     move.w    d0,40(a1)        ;Reset Pattern Pos
  596.     move.w    d2,6(a1)        ;Set Song Position
  597.  
  598. FFORWAO    movem.l    (sp)+,d0/d2/a0-a1
  599.     rts
  600. ;------------------------------------------------------------------------------
  601. ; ChangeChannel
  602. ;
  603. ; IN :    A1 = Address
  604. ;    D1 = Channel (0-3)
  605. ;    D2 = State (0=Off 1=On)
  606. ;
  607. ; OUT:    Nothing
  608. ;
  609.  
  610. FC_ChangeChannel
  611.     movem.l    d0-d4/a0,-(sp)
  612.  
  613.     moveq    #0,d3
  614.     moveq    #-1,d4
  615.     bclr    d1,d4
  616.     tst.b    d2
  617.     beq.b    .chgch1
  618.     bset    d1,d3
  619.  
  620. .CHGCH1    lea    FC_DataArea,a0
  621.     move.w    F13_ActChan(a0),d0
  622.     and.w    d4,d0
  623.     or.w    d3,d0
  624.     move.w    d0,F13_ActChan(a0)
  625.  
  626.     movem.l    (sp)+,d0-d4/a0
  627.     rts
  628. ;------------------------------------------------------------------------------
  629. SILENT    dc.w    $0100,$0000,$0000,$00e1
  630. o4a0c8    dc.l    $00000000,$00100003,$00200006,$00300009
  631. PERIODS    dc.w    $06b0,$0650,$05f4,$05a0,$054c,$0500,$04b8,$0474
  632.     dc.w    $0434,$03f8,$03c0,$038a,$0358,$0328,$02fa,$02d0
  633.     dc.w    $02a6,$0280,$025c,$023a,$021a,$01fc,$01e0,$01c5
  634.     dc.w    $01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d
  635.     dc.w    $010d,$00fe,$00f0,$00e2,$00d6,$00ca,$00be,$00b4
  636.     dc.w    $00aa,$00a0,$0097,$008f,$0087,$007f,$0078,$0071
  637.     dc.w    $0071,$0071,$0071,$0071,$0071,$0071,$0071,$0071
  638.     dc.w    $0071,$0071,$0071,$0071,$0d60,$0ca0,$0be8,$0b40
  639.     dc.w    $0a98,$0a00,$0970,$08e8,$0868,$07f0,$0780,$0714
  640.     dc.w    $1ac0,$1940,$17d0,$1680,$1530,$1400,$12e0,$11d0
  641.     dc.w    $10d0,$0fe0,$0f00,$0e28
  642. ;------------------------------------------------------------------------------
  643.     SECTION    PlayRoutine,CODE_C
  644.  
  645. ; PlayModule
  646. ;
  647. ; IN :    A1 = Address
  648. ;    D1 = VBlank/Cia (0=CIA)
  649. ;
  650. ; OUT:    Nothing
  651. ;
  652.  
  653. FC_PlayModule
  654.     movem.l    d0-d7/a0-a6,-(sp)
  655.     lea    FC_DataArea,a4
  656.     move.l    a5,F13_Global(a4)
  657.     bsr.b    play
  658.     movem.l    (sp)+,d0-d7/a0-a6
  659.     rts
  660.  
  661. PLAY    lea    F13_PerVol(a4),a6
  662.     tst.w    F13_OnOff(a4)
  663.     bne.b    music_on
  664.     rts
  665.  
  666. music_on
  667.     subq.w    #1,F13_ReSpCnt(a4)    ;Decrease replayspeed counter
  668.     bne.b    nonewnote
  669.     move.w    F13_RepSpd(a4),F13_ReSpCnt(a4);Restore replayspeed counter
  670.     lea    F13_V1Data(a4),a0    ;Point to voice1 data area
  671.     bsr.w    new_note
  672.     lea    F13_V2Data(a4),a0    ;Point to voice2 data area
  673.     bsr.w    new_note
  674.     lea    F13_V3Data(a4),a0    ;Point to voice3 data area
  675.     bsr.w    new_note
  676.     lea    F13_V4Data(a4),a0    ;Point to voice4 data area
  677.     bsr.w    new_note
  678.  
  679. nonewnote
  680.     clr.w    F13_AudTemp(a4)
  681.     lea    F13_V1Data(a4),a0
  682.     bsr.w    effects
  683.     move.w    d0,(a6)+
  684.     move.w    d1,(a6)+
  685.     lea    F13_V2Data(a4),a0
  686.     bsr.w    effects
  687.     move.w    d0,(a6)+
  688.     move.w    d1,(a6)+
  689.     lea    F13_V3Data(a4),a0
  690.     bsr.w    effects
  691.     move.w    d0,(a6)+
  692.     move.w    d1,(a6)+
  693.     lea    F13_V4Data(a4),a0
  694.     bsr.w    effects
  695.     move.w    d0,(a6)+
  696.     move.w    d1,(a6)+
  697.     lea    F13_PerVol(a4),a6
  698.     move.w    F13_AudTemp(a4),d0
  699.     and.w    F13_ActChan(a4),d0
  700.     ori.w    #$8000,d0        ;Set/clr bit = 1
  701.     move.w    d0,-(a7)
  702.     moveq    #0,d1
  703.     move.l    F13_Start1(a4),d2    ;Get samplepointers
  704.     move.w    F13_Offset1(a4),d1    ;Get offset
  705.     add.l    d1,d2            ;Add offset
  706.     move.l    F13_Start2(a4),d3
  707.     move.w    F13_Offset2(a4),d1
  708.     add.l    d1,d3
  709.     move.l    F13_Start3(a4),d4
  710.     move.w    F13_Offset3(a4),d1
  711.     add.l    d1,d4
  712.     move.l    F13_Start4(a4),d5
  713.     move.w    F13_Offset4(a4),d1
  714.     add.l    d1,d5
  715.     move.w    F13_SSize1(a4),d0    ;Get sound lengths
  716.     move.w    F13_SSize2(a4),d1
  717.     move.w    F13_SSize3(a4),d6
  718.     move.w    F13_SSize4(a4),d7
  719.     move.w    (a7)+,$dff096        ;Enable audio DMA
  720.  
  721. chan1    lea    F13_V1Data(a4),a0
  722.     tst.w    72(a0)
  723.     beq.b    chan2
  724.     subq.w    #1,72(a0)
  725.     cmpi.w    #1,72(a0)
  726.     bne.b    chan2
  727.     clr.w    72(a0)
  728.     btst    #0,F13_ActChan+1(a4)
  729.     beq.b    chan2
  730.     move.l    d2,$dff0a0        ;Set soundstart
  731.     move.w    d0,$dff0a4        ;Set soundlength
  732.  
  733. chan2    lea    F13_V2Data(a4),a0
  734.     tst.w    72(a0)
  735.     beq.b    chan3
  736.     subq.w    #1,72(a0)
  737.     cmpi.w    #1,72(a0)
  738.     bne.b    chan3
  739.     clr.w    72(a0)
  740.     btst    #1,F13_ActChan+1(a4)
  741.     beq.b    chan3
  742.     move.l    d3,$dff0b0
  743.     move.w    d1,$dff0b4
  744.  
  745. chan3    lea    F13_V3Data(a4),a0
  746.     tst.w    72(a0)
  747.     beq.b    chan4
  748.     subq.w    #1,72(a0)
  749.     cmpi.w    #1,72(a0)
  750.     bne.b    chan4
  751.     clr.w    72(a0)
  752.     btst    #2,F13_ActChan+1(a4)
  753.     beq.b    chan4
  754.     move.l    d4,$dff0c0
  755.     move.w    d6,$dff0c4
  756.  
  757. chan4    lea    F13_V4Data(a4),a0
  758.     tst.w    72(a0)
  759.     beq.b    setpervol
  760.     subq.w    #1,72(a0)
  761.     cmpi.w    #1,72(a0)
  762.     bne.b    setpervol
  763.     clr.w    72(a0)
  764.     btst    #3,F13_ActChan+1(a4)
  765.     beq.b    setpervol
  766.     move.l    d5,$dff0d0
  767.     move.w    d7,$dff0d4
  768.  
  769. setpervol
  770.     move.l    F13_Global(a4),a0
  771.     move.l    APG_CalcVolume(a0),a0
  772.     lea    $dff0a6,a5
  773.     move.w    F13_ActChan(a4),d7
  774.  
  775.     moveq    #0,d0
  776.     move.w    (a6),d2
  777.     addq.l    #4,a6
  778.     btst    #0,d7
  779.     beq.b    .skip1
  780.     move.w    d2,(a5)            ;Set period
  781.     move.w    -2(a6),d0        ;Get Volume
  782.     jsr    (a0)
  783. .SKIP1    move.w    d0,2(a5)        ;Set volume
  784.  
  785.     moveq    #0,d0
  786.     move.w    (a6),d2
  787.     addq.l    #4,a6
  788.     btst    #1,d7
  789.     beq.b    .skip2
  790.     move.w    d2,16(a5)        ;Set period
  791.     move.w    -2(a6),d0        ;Get Volume
  792.     jsr    (a0)
  793. .SKIP2    move.w    d0,18(a5)        ;Set volume
  794.  
  795.     moveq    #0,d0
  796.     move.w    (a6),d2
  797.     addq.l    #4,a6
  798.     btst    #2,d7
  799.     beq.b    .skip3
  800.     move.w    d2,32(a5)        ;Set period
  801.     move.w    -2(a6),d0        ;Get Volume
  802.     jsr    (a0)
  803. .SKIP3    move.w    d0,34(a5)        ;Set volume
  804.  
  805.     moveq    #0,d0
  806.     move.w    (a6),d2
  807.     addq.l    #4,a6
  808.     btst    #3,d7
  809.     beq.b    .skip4
  810.     move.w    d2,48(a5)        ;Set period
  811.     move.w    -2(a6),d0        ;Get Volume
  812.     jsr    (a0)
  813. .SKIP4    move.w    d0,50(a5)        ;Set volume
  814.     rts
  815.  
  816. new_note
  817.     moveq    #0,d5
  818.     move.l    34(a0),a1
  819.     adda.w    40(a0),a1
  820.     cmp.w    #64,40(a0)
  821.     bne.b    samepat
  822.     move.l    FC_DataArea+F13_Global,a2
  823.     move.l    APG_SendMsg(a2),a2
  824.     move.w    #MSG_NextPos,d2
  825.     jsr    (a2)            ;Send NextPos Message
  826.     move.l    (a0),a2
  827.     adda.w    6(a0),a2        ;Point to next sequence row
  828.     cmpa.l    52(a0),a2        ;Is it the end?
  829.     bne.b    notend
  830.     move.l    FC_DataArea+F13_Global,a2
  831.     move.l    APG_SendMsg(a2),a2
  832.     move.w    #MSG_NextMod,d2
  833.     jsr    (a2)            ;Send NextMod Message
  834.     move.w    d5,6(a0)
  835.     move.l    (a0),a2            ;Point to first sequence
  836.  
  837. notend    moveq    #1,d1
  838.     addq.b    #1,F13_SpdTemp(a4)
  839.     cmpi.b    #5,F13_SpdTemp(a4)
  840.     bne.b    nonewspd
  841.     move.b    d1,F13_SpdTemp(a4)
  842.     move.b    12(a2),d1        ;Get new replay speed
  843.     beq.b    nonewspd
  844.     move.w    d1,F13_ReSpCnt(a4)    ;store in counter
  845.     move.w    d1,F13_RepSpd(a4)
  846.  
  847. nonewspd
  848.     move.b    (a2),d1            ;Pattern to play
  849.     move.b    1(a2),44(a0)        ;Transpose value
  850.     move.b    2(a2),22(a0)        ;Soundtranspose value
  851.  
  852.     move.w    d5,40(a0)
  853.     lsl.w    #6,d1
  854.     add.l    F13_PATPoint(a4),d1    ;Get pattern pointer
  855.     move.l    d1,34(a0)
  856.     addi.w    #$000d,6(a0)
  857.     move.l    d1,a1
  858.  
  859. samepat    move.b    1(a1),d1        ;Get info byte
  860.     move.b    (a1)+,d0        ;Get note
  861.     bne.b    ww1
  862.     andi.w    #%11000000,d1
  863.     beq.b    noport
  864.     bra.b    ww11
  865.  
  866. ww1    move.w    d5,56(a0)
  867. ww11    move.b    d5,47(a0)
  868.     move.b    (a1),31(a0)
  869.  
  870.         ;31(a0) = PORTAMENTO/INSTR. info
  871.             ;Bit 7 = portamento on
  872.             ;Bit 6 = portamento off
  873.             ;Bit 5-0 = instrument number
  874.         ;47(a0) = portamento value
  875.             ;Bit 7-5 = always zero
  876.             ;Bit 4 = up/down
  877.             ;Bit 3-0 = value
  878. t_porton
  879.     btst    #7,d1
  880.     beq.b    noport
  881.     move.b    2(a1),47(a0)    
  882. noport    andi.w    #$007f,d0
  883.     beq.b    nextnote
  884.     move.b    d0,8(a0)
  885.     move.b    (a1),9(a0)
  886.     move.b    32(a0),d2
  887.     moveq    #0,d3
  888.     bset    d2,d3
  889.     or.w    d3,F13_AudTemp(a4)
  890.     move.w    d3,$dff096
  891.     move.b    (a1),d1
  892.     andi.w    #$003f,d1        ;Max 64 instruments
  893.     add.b    22(a0),d1
  894.     move.l    F13_VOLPoint(a4),a2
  895.     lsl.w    #6,d1
  896.     adda.w    d1,a2
  897.     move.w    d5,16(a0)
  898.     move.b    (a2),23(a0)
  899.     move.b    (a2)+,24(a0)
  900.     move.b    (a2)+,d1
  901.     andi.w    #$00ff,d1
  902.     move.b    (a2)+,27(a0)
  903.     move.b    #$40,46(a0)
  904.     move.b    (a2)+,d0
  905.     move.b    d0,28(a0)
  906.     move.b    d0,29(a0)
  907.     move.b    (a2)+,30(a0)
  908.     move.l    a2,10(a0)
  909.     move.l    F13_FRQPoint(a4),a2
  910.     lsl.w    #6,d1
  911.     adda.w    d1,a2
  912.     move.l    a2,18(a0)
  913.     move.w    d5,50(a0)
  914.     move.b    d5,26(a0)
  915.     move.b    d5,25(a0)
  916. nextnote
  917.     addq.w    #2,40(a0)
  918.     rts
  919.  
  920. effects    moveq    #0,d7
  921. testsustain
  922.     tst.b    26(a0)            ;Is sustain counter = 0
  923.     beq.b    sustzero
  924.     subq.b    #1,26(a0)        ;if no, decrease counter
  925.     bra.w    VOLUfx
  926.  
  927. sustzero                ;Next part of effect sequence
  928.     move.l    18(a0),a1        ;can be executed now.
  929.     adda.w    50(a0),a1
  930. testeffects
  931.     cmpi.b    #$e1,(a1)        ;E1 = end of FREQseq sequence
  932.     beq.w    VOLUfx
  933.     cmpi.b    #$e0,(a1)        ;E0 = loop to other part of sequence
  934.     bne.b    testnewsound
  935.     move.b    1(a1),d0        ;loop to start of sequence + 1(a1)
  936.     andi.w    #$003f,d0
  937.     move.w    d0,50(a0)
  938.     move.l    18(a0),a1
  939.     adda.w    d0,a1
  940. testnewsound
  941.     move.l    a4,-(sp)
  942.     cmpi.b    #$e2,(a1)        ;E2 = set waveform
  943.     bne.b    o49c64
  944.     moveq    #0,d0
  945.     moveq    #0,d1
  946.     move.b    32(a0),d1
  947.     bset    d1,d0
  948.     or.w    d0,F13_AudTemp(a4)
  949.     move.w    d0,$dff096
  950.     move.b    1(a1),d0
  951.     andi.w    #$00ff,d0
  952.     lea    F13_SoundInfo(a4),a4
  953.     add.w    d0,d0
  954.     move.w    d0,d1
  955.     add.w    d1,d1
  956.     add.w    d1,d1
  957.     add.w    d1,d0
  958.     adda.w    d0,a4
  959.     move.l    60(a0),a3
  960.     move.l    (a4),d1
  961.     add.l    #WAVEFORMS,d1
  962.     move.l    d1,(a3)
  963.     move.l    d1,68(a0)
  964.     move.w    4(a4),4(a3)
  965.     move.l    6(a4),64(a0)
  966.     swap    d1
  967.     move.w    #$0003,72(a0)
  968.     tst.w    d1
  969.     bne.b    o49c52
  970.     move.w    #$0002,72(a0)
  971. o49c52    clr.w    16(a0)
  972.     move.b    #$01,23(a0)
  973.     addq.w    #2,50(a0)
  974.     move.l    (sp)+,a4
  975.     bra.w    o49d02
  976.  
  977. o49c64    cmpi.b    #$e4,(a1)
  978.     bne.b    testpatjmp
  979.     move.b    1(a1),d0
  980.     andi.w    #$00ff,d0
  981.     lea    F13_SoundInfo(a4),a4
  982.     add.w    d0,d0
  983.     move.w    d0,d1
  984.     add.w    d1,d1
  985.     add.w    d1,d1
  986.     add.w    d1,d0
  987.     adda.w    d0,a4
  988.     move.l    60(a0),a3
  989.     move.l    (a4),d1
  990.     add.l    #WAVEFORMS,d1
  991.     move.l    d1,(a3)
  992.     move.l    d1,68(a0)
  993.     move.w    4(a4),4(a3)
  994.     move.l    6(a4),64(a0)
  995.  
  996.     swap    d1
  997.     move.w    #$0003,72(a0)
  998.     tst.w    d1
  999.     bne.b    o49cae
  1000.     move.w    #$0002,72(a0)
  1001. o49cae    addq.w    #2,50(a0)
  1002.     move.l    (sp)+,a4
  1003.     bra.b    o49d02
  1004.  
  1005. testpatjmp
  1006.     move.l    (sp)+,a4
  1007.     cmpi.b    #$e7,(a1)
  1008.     bne.b    testnewsustain
  1009.     move.b    1(a1),d0
  1010.     andi.w    #$00ff,d0
  1011.     lsl.w    #6,d0
  1012.     move.l    F13_FRQPoint(a4),a1
  1013.     adda.w    d0,a1
  1014.     move.l    a1,18(a0)
  1015.     move.w    d7,50(a0)
  1016.     bra.w    testeffects
  1017.  
  1018. testnewsustain
  1019.     cmpi.b    #$e8,(a1)        ;E8 = set sustain time
  1020.     bne.b    o49cea
  1021.     move.b    1(a1),26(a0)
  1022.     addq.w    #2,50(a0)
  1023.     bra.w    testsustain
  1024.  
  1025. o49cea    cmpi.b    #$e3,(a1)
  1026.     bne.b    o49d02
  1027.     addq.w    #3,50(a0)
  1028.     move.b    1(a1),27(a0)
  1029.     move.b    2(a1),28(a0)
  1030.  
  1031. o49d02    move.l    18(a0),a1
  1032.     adda.w    50(a0),a1
  1033.     move.b    (a1),43(a0)
  1034.     addq.w    #1,50(a0)
  1035.  
  1036. VOLUfx    tst.b    25(a0)
  1037.     beq.b    o49d1e
  1038.     subq.b    #1,25(a0)
  1039.     bra.b    o49d70
  1040.  
  1041. o49d1e    subq.b    #1,23(a0)
  1042.     bne.b    o49d70
  1043.     move.b    24(a0),23(a0)
  1044.  
  1045. o49d2a    move.l    10(a0),a1
  1046.     adda.w    16(a0),a1
  1047.     move.b    (a1),d0
  1048.     cmpi.b    #$e8,d0
  1049.     bne.b    o49d4a
  1050.     addq.w    #2,16(a0)
  1051.     move.b    1(a1),25(a0)
  1052.     bra.b    VOLUfx
  1053.  
  1054. o49d4a    cmpi.b    #$e1,d0
  1055.     beq.b    o49d70
  1056.     cmpi.b    #$e0,d0
  1057.     bne.b    o49d68
  1058.     move.b    1(a1),d0
  1059.     andi.l    #$003f,d0
  1060.     subq.b    #5,d0
  1061.     move.w    d0,16(a0)
  1062.     bra.b    o49d2a
  1063.  
  1064. o49d68    move.b    (a1),45(a0)
  1065.     addq.w    #1,16(a0)
  1066. o49d70    move.b    43(a0),d0
  1067.     bmi.b    o49d7e
  1068.     add.b    8(a0),d0
  1069.     add.b    44(a0),d0
  1070. o49d7e    andi.w    #$007f,d0
  1071.     lea    PERIODS,a1
  1072.     add.w    d0,d0
  1073.     move.w    d0,d1
  1074.     adda.w    d0,a1
  1075.     move.w    (a1),d0
  1076.     move.b    46(a0),d7
  1077.     tst.b    30(a0)
  1078.     beq.b    o49d9e
  1079.     subq.b    #1,30(a0)
  1080.     bra.b    o49df4
  1081.  
  1082. o49d9e    move.b    d1,d5
  1083.     move.b    28(a0),d4
  1084.     add.b    d4,d4
  1085.     move.b    29(a0),d1
  1086.     tst.b    d7
  1087.     bpl.b    o49db4
  1088.     btst    #0,d7
  1089.     bne.b    o49dda
  1090. o49db4    btst    #5,d7
  1091.     bne.b    o49dc8
  1092.     sub.b    27(a0),d1
  1093.     bcc.b    o49dd6
  1094.     bset    #5,d7
  1095.     moveq    #0,d1
  1096.     bra.b    o49dd6
  1097.  
  1098. o49dc8    add.b    27(a0),d1
  1099.     cmp.b    d4,d1
  1100.     bcs.b    o49dd6
  1101.     bclr    #5,d7
  1102.     move.b    d4,d1
  1103. o49dd6    move.b    d1,29(a0)
  1104. o49dda    lsr.b    #1,d4
  1105.     sub.b    d4,d1
  1106.     bcc.b    o49de4
  1107.     subi.w    #$0100,d1
  1108. o49de4    addi.b    #$a0,d5
  1109.     bcs.b    o49df2
  1110. o49dea    add.w    d1,d1
  1111.     addi.b    #$18,d5
  1112.     bcc.b    o49dea
  1113. o49df2    add.w    d1,d0
  1114. o49df4    eori.b    #$01,d7
  1115.     move.b    d7,46(a0)
  1116.  
  1117. ; DO THE PORTAMENTO THING
  1118.     moveq    #0,d1
  1119.     move.b    47(a0),d1        ;get portavalue
  1120.     beq.b    a56d0            ;0=no portamento
  1121.     cmpi.b    #$1f,d1
  1122.     bls.b    portaup
  1123. portadown
  1124.     andi.w    #$1f,d1
  1125.     neg.w    d1
  1126. portaup    sub.w    d1,56(a0)
  1127. a56d0    add.w    56(a0),d0
  1128. o49e3e    cmpi.w    #$0070,d0
  1129.     bhi.b    nn1
  1130.     move.w    #$0071,d0
  1131. nn1    cmpi.w    #$06b0,d0
  1132.     bls.b    nn2
  1133.     move.w    #$06b0,d0
  1134. nn2    moveq    #0,d1
  1135.     move.b    45(a0),d1
  1136.     rts
  1137. ;------------------------------------------------------------------------------
  1138.     SECTION    WaveForms,DATA_C
  1139.  
  1140. WAVEFORMS
  1141.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1142.     dc.w $3f37,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1143.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1144.     dc.w $c037,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1145.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1146.     dc.w $c0b8,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1147.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1148.     dc.w $c0b8,$b027,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1149.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1150.     dc.w $c0b8,$b0a8,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1151.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1152.     dc.w $c0b8,$b0a8,$a017,$0f07,$ff07,$0f17,$1f27,$2f37
  1153.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1154.     dc.w $c0b8,$b0a8,$a098,$0f07,$ff07,$0f17,$1f27,$2f37
  1155.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1156.     dc.w $c0b8,$b0a8,$a098,$9007,$ff07,$0f17,$1f27,$2f37
  1157.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1158.     dc.w $c0b8,$b0a8,$a098,$9088,$ff07,$0f17,$1f27,$2f37
  1159.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1160.     dc.w $c0b8,$b0a8,$a098,$9088,$8007,$0f17,$1f27,$2f37
  1161.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1162.     dc.w $c0b8,$b0a8,$a098,$9088,$8088,$0f17,$1f27,$2f37
  1163.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1164.     dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9017,$1f27,$2f37
  1165.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1166.     dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$1f27,$2f37
  1167.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1168.     dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a027,$2f37
  1169.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1170.     dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a0a8,$2f37
  1171.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1172.     dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a0a8,$b037
  1173.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1174.     dc.w $7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1175.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1176.     dc.w $817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1177.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1178.     dc.w $8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1179.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1180.     dc.w $8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1181.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1182.     dc.w $8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1183.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1184.     dc.w $8181,$8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1185.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1186.     dc.w $8181,$8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1187.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1188.     dc.w $8181,$8181,$8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f
  1189.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1190.     dc.w $8181,$8181,$8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f
  1191.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1192.     dc.w $8181,$8181,$8181,$8181,$817f,$7f7f,$7f7f,$7f7f
  1193.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1194.     dc.w $8181,$8181,$8181,$8181,$8181,$7f7f,$7f7f,$7f7f
  1195.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1196.     dc.w $8181,$8181,$8181,$8181,$8181,$817f,$7f7f,$7f7f
  1197.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1198.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$7f7f,$7f7f
  1199.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1200.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$817f,$7f7f
  1201.     dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$8080
  1202.     dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$7f7f
  1203.     dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$8080
  1204.     dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$807f
  1205.     dc.w $8080,$8080,$8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f
  1206.     dc.w $8080,$8080,$8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f
  1207.     dc.w $8080,$8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1208.     dc.w $8080,$8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1209.     dc.w $8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1210.     dc.w $8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1211.     dc.w $8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1212.     dc.w $8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1213.     dc.w $8080,$9098,$a0a8,$b0b8,$c0c8,$d0d8,$e0e8,$f0f8
  1214.     dc.w $0008,$1018,$2028,$3038,$4048,$5058,$6068,$707f
  1215.     dc.w $8080,$a0b0,$c0d0,$e0f0,$0010,$2030,$4050,$6070
  1216.     dc.w $4545,$797d,$7a77,$7066,$6158,$534d,$2c20,$1812
  1217.     dc.w $04db,$d3cd,$c6bc,$b5ae,$a8a3,$9d99,$938e,$8b8a
  1218.     dc.w $4545,$797d,$7a77,$7066,$5b4b,$4337,$2c20,$1812
  1219.     dc.w $04f8,$e8db,$cfc6,$beb0,$a8a4,$9e9a,$9594,$8d83
  1220.     dc.w $0000,$4060,$7f60,$4020,$00e0,$c0a0,$80a0,$c0e0
  1221.     dc.w $0000,$4060,$7f60,$4020,$00e0,$c0a0,$80a0,$c0e0
  1222.     dc.w $8080,$9098,$a0a8,$b0b8,$c0c8,$d0d8,$e0e8,$f0f8
  1223.     dc.w $0008,$1018,$2028,$3038,$4048,$5058,$6068,$707f
  1224.     dc.w $8080,$a0b0,$c0d0,$e0f0,$0010,$2030,$4050,$6070
  1225. ;------------------------------------------------------------------------------
  1226.     SECTION    DataArea,BSS
  1227.  
  1228. FC_DataArea
  1229.     ds.b    Future13Struct_SIZEOF
  1230. ;------------------------------------------------------------------------------
  1231. SLUT
  1232.